#include<bits/stdc++.h>
using namespace std;
const int N=310,mod=1e9+7;
int n,ans,b[N],c[N],d[N],num[N+N];
int st,loc[N];
char a[N];
priority_queue<int,vector<int>,greater<int> >q;
inline void Max(int &x,int y) {x=x>y?x:y;}
inline void Min(int &x,int y) {x=x>y?y:x;}
inline void upd(int &x,int y) {x+=y;x=(x>=mod)?x-mod:x;}
inline int add(int x,int y) {upd(x,y);return x;}
int main()
{
    freopen("bracket.in","r",stdin);
    freopen("bracket.out","w",stdout);
    scanf("%d%s",&n,a+1);
    for(int i=1;i<=n;i++)
        if(a[i]=='x') loc[st++]=i;
        else b[i]=a[i]=='('?1:-1;
    d[n+1]=n+n;
    for(int i=0;i<(1<<st);i++)
    {
        for(int j=0;j<st;j++)
            b[loc[j]]=(i>>j&1)?1:-1;
        for(int j=1;j<=n;j++) c[j]=b[j]+c[j-1];
        for(int j=n;j;j--) d[j]=min(c[j],d[j+1]);
        if(!c[n]&&d[1]>=0) {++ans;continue;}
        // bool flag=0;
        // for(int j=1;j<=n;j++)
        // {
        //     for(int k=j;k<=n;k++)
        //     {
        //         if(c[k]>2*c[j-1]) break;
        //         if(c[n]==2*(c[k]-c[j-1])&&d[k+1]-c[n]>=0) {flag=1;break;}
        //     }
        //     if(c[j]<0||flag) break;
        // }
        while(!q.empty()) num[q.top()+N]=0,q.pop();
        q.push(0),++num[N];
        bool flag=0,f=1;
        for(int j=1;j<=n;j++)
        {
            while(!q.empty())
            {
                int x=q.top();
                if(x*2<c[j]) --num[x+N],q.pop();
                else break;
            }
            int ned=c[j]-c[n]/2;
            if(num[ned+N]&&d[j+1]-c[n]>=0) {flag=j;break;}
            if(c[j]<0) f=0;
            if(f) q.push(c[j]),++num[c[j]+N];
        }
        // for(int j=1;j<=n;j++)
        //     cerr<<b[j]<<" \n"[j==n];
        // cerr<<i<<" "<<flag<<endl;
        ans+=flag;
    }
    printf("%d\n",ans);
    return 0;
}